/*
    The NeonX Library

    Copyright (c) 2013 darkcat

    Code covered by the MIT License
*/

#pragma once

// nx...
#include "config/general.h"
// nx::alloc
#include "memory/memalloc.h"

//////////////////////////////////////////////////////////////////////////
NX_BEG
//////////////////////////////////////////////////////////////////////////

//struct MemBase
//{
//    pvoid operator new       (size_t s) { return nx::alloc(s); }
//    pvoid operator new    [] (size_t s) { return nx::alloc(s); }
//    void  operator delete    (pvoid p)  { nx::free(p); }
//    void  operator delete [] (pvoid p)  { nx::free(p); }
//};
//
//class GCBase : public MemBase
//{
//public:
//    // For allocate memory
//    static pvoid alloc(size_t s, GCBase* v) { return blink(MemBase::operator new(s), v); }
//    static void  free(pvoid p)              { MemBase::operator delete(p); }
//
//    // For remember parent var for a moment
//    static pvoid blink(pvoid /*p*/, GCBase* /*v*/)
//    {
//        return NX_NULL;
//    }
//
//    // For forget parent var of the point
//    static GCBase* blink(pvoid /*p*/)
//    {
//        return NX_NULL;
//    }
//
//    // For connect var and point
//    void connect(pvoid p)
//    {
//        // Connect var and var
//        connect(blink(p));
//    }
//
//    // For connect var and var
//    void connect(GCBase* v)
//    {
//        if (!v) return ;
//    }
//
//public:
//    pvoid operator new       (size_t s, GCBase* v) { return alloc(s, v); }
//    pvoid operator new    [] (size_t s, GCBase* v) { return alloc(s, v); }
//    void  operator delete    (pvoid p)             { free(p); }
//    void  operator delete [] (pvoid p)             { free(p); }
//};

//////////////////////////////////////////////////////////////////////////
NX_END
//////////////////////////////////////////////////////////////////////////
